package cn.cdqf.coupon.dispatch.service.impl;

import cn.cdqf.coupon.common.CommonCanstant;
import cn.cdqf.coupon.dispatch.dao.CouponCodeUserMapper;
import cn.cdqf.coupon.dispatch.service.DispatchService;
import cn.cdqf.global.common.ResultResponse;
import cn.cdqf.global.util.RedisUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class DispatchServiceImpl implements DispatchService {
   @Autowired
   private RedisUtils redisUtils;
   @Autowired
   private CouponCodeUserMapper couponCodeUserMapper;

    @Override
    @Transactional
    public ResultResponse dispatchByUserIdAndMerantchIdAndLevel(String userId, String merchantId, Integer level) {
        level = level==null||level<=0?1:level;
        //先走redis common_merchantId_level 拿到一个模板id
        String templateId = (String) redisUtils.sRandom(CommonCanstant.CouponConstant.COMMON_COUPON_MERCHANTID_LEVEL + CommonCanstant.SPLIT + merchantId + CommonCanstant.SPLIT + level);
        //把中间表修改
        if(templateId!=null) {
            //拿到优惠券码id
            String couponId = (String) redisUtils.spop(CommonCanstant.CouponConstant.REDIS_COUPON_COUPONID + templateId);
            //插入数据库
            try {
                int i = couponCodeUserMapper.updateByCode(couponId, userId);
                if (i < 1) {
                    //更新失败返回上一步
                    redisUtils.sset(CommonCanstant.CouponConstant.REDIS_COUPON_COUPONID + templateId, couponId);
                }
            }catch (Exception e){
                redisUtils.sset(CommonCanstant.CouponConstant.REDIS_COUPON_COUPONID + templateId, couponId);
                throw new RuntimeException(e);
            }
        }
        return ResultResponse.success(templateId);
    }
}
